import axios from 'axios'

// 创建axios实例
const apiClient = axios.create({
  baseURL: 'http://localhost:5173', // 使用Vite开发服务器作为代理
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 添加请求拦截器以记录请求信息
apiClient.interceptors.request.use(
  (config) => {
    console.log('发送请求:', {
      method: config.method,
      url: config.url,
      headers: config.headers,
      data: config.data
    })
    return config
  },
  (error) => {
    console.error('请求配置错误:', error)
    return Promise.reject(error)
  }
)

// 添加响应拦截器以记录响应信息
apiClient.interceptors.response.use(
  (response) => {
    console.log('收到响应:', {
      status: response.status,
      statusText: response.statusText,
      headers: response.headers,
      data: response.data
    })
    return response
  },
  (error) => {
    console.error('响应错误:', {
      status: error.response?.status,
      statusText: error.response?.statusText,
      headers: error.response?.headers,
      data: error.response?.data,
      message: error.message,
      code: error.code
    })
    return Promise.reject(error)
  }
)

// 测试购物车数量更新接口
async function testCartQuantityApi() {
  try {
    console.log('\n===== 测试购物车数量更新接口 =====')
    
    // 测试不使用Authorization头
    try {
      console.log('测试不使用Authorization头')
      const response = await apiClient.post('/carts/quantity', {
        cartId: '1',
        buyQuantity: 2
      })
      console.log('购物车数量更新成功:', response.data)
    } catch (error) {
      console.error('购物车数量更新失败:', error.message)
    }
    
  } catch (error) {
    console.error('购物车数量更新接口测试失败:', error.message)
  }
}

// 测试其他购物车相关接口
async function testOtherCartEndpoints() {
  try {
    console.log('\n===== 测试其他购物车相关接口 =====')
    
    // 测试购物车列表接口
    console.log('测试购物车列表接口: /carts/list')
    const listResponse = await apiClient.get('/carts/list')
    console.log('购物车列表接口响应:', listResponse.data)
    
  } catch (error) {
    console.error('购物车列表接口测试失败:', error.message)
  }
  
  try {
    // 测试添加到购物车接口
    console.log('测试添加到购物车接口: /carts/add')
    const addResponse = await apiClient.post('/carts/add', {
      productId: '1',
      buyQuantity: 1
    })
    console.log('添加到购物车接口响应:', addResponse.data)
    
  } catch (error) {
    console.error('添加到购物车接口测试失败:', error.message)
  }
}

// 测试不需要认证的接口（如果有）
async function testPublicEndpoint() {
  try {
    console.log('\n===== 测试不需要认证的接口 =====')
    
    // 尝试访问商品列表或分类列表等可能不需要认证的接口
    console.log('测试商品列表接口: /products')
    const res = await apiClient.get('/products')
    console.log('商品列表接口响应:', res.data)
    console.log('测试成功! 可以正常访问不需要认证的接口')
    
    return true
  } catch (error) {
    console.error('测试不需要认证的接口失败:', error.message)
    if (error.response) {
      console.error('状态码:', error.response.status)
      console.error('响应头:', error.response.headers)
    }
    return false
  }
}

// 运行测试流程
async function runTests() {
  try {
    console.log('开始测试API连接...')
    
    // 先测试不需要认证的接口
    const publicAccessSuccess = await testPublicEndpoint()
    
    if (!publicAccessSuccess) {
      console.log('\n无法访问不需要认证的接口，可能是API配置问题')
      
      // 尝试直接测试连接
      console.log('\n尝试直接测试API连接...')
      try {
        const testRes = await fetch('http://localhost:8081', {
          method: 'GET',
          timeout: 5000
        })
        console.log('直接连接测试结果: 成功')
        console.log('状态码:', testRes.status)
        console.log('响应头:', Object.fromEntries(testRes.headers))
      } catch (error) {
        console.error('直接连接测试失败:', error.message)
      }
    }
    
    console.log('\n所有测试完成')
  } catch (error) {
    console.error('测试流程执行失败:', error)
  }
}

runTests()